package com.example.zhidao.controller;

import com.baomidou.mybatisplus.core.conditions.query.QueryWrapper;
import com.baomidou.mybatisplus.core.conditions.update.UpdateWrapper;
import com.baomidou.mybatisplus.extension.plugins.pagination.Page;
import com.example.zhidao.dao.ChatMapper;
import com.example.zhidao.model.Spage.ShowPage;
import com.example.zhidao.model.po.Blog;
import com.example.zhidao.model.po.Chat;
import com.example.zhidao.model.responseData.ResponseData;
import com.example.zhidao.model.vo.InfoVo;
import com.example.zhidao.service.ChatService;
import com.example.zhidao.utils.Ujwt;
import io.jsonwebtoken.Claims;
import org.springframework.beans.factory.annotation.Autowired;
import org.springframework.web.bind.annotation.*;

import javax.annotation.Resource;
import java.util.List;

@RestController
@CrossOrigin
@RequestMapping("/chat")
public class ChatController {//2

    @Autowired
    Ujwt ujwt;

    @Autowired
    ChatService chatService;

    @Resource
    ChatMapper chatMapper;

//    获取前十条聊天记录
//    获取记录时将所有的收到的指定用户的信息的状态转为已读
    @GetMapping("/list")
    public ResponseData getChatList(@RequestHeader("token") String token, String toid, Page p){

//        参数解析，token解出来的uid是我自己的id  toid是我对话的用户的id

        Claims claims=(Claims)ujwt.tokenToOut(token);//强制转换属性
        String uid=claims.getId();

//        将所有该用户对我说的由未读化为已读
        UpdateWrapper<Chat> uw=new UpdateWrapper<>();

        uw.eq("fromid", toid).eq("toid", uid).set("state",1);
        boolean i=chatService.update(uw);
        System.out.println("111111111111111111111111111111111");
        System.out.println(i);

        QueryWrapper<Chat> qw=new QueryWrapper<>();
//
        qw.and(wrapper -> wrapper.eq("fromid", uid).eq("toid", toid))
                .or(wrapper -> wrapper.eq("fromid", toid).eq("toid", uid));
//        qw.eq("fromid","uu");
//        qw.or();
//        qw.eq("fromid",toid);
//        qw.eq("toid",toid);
//        qw.or();
//        qw.eq("toid","uu");

        qw.orderByDesc("createtime");

        Page<Chat> chatList=chatService.page(p,qw);

        if(chatList!=null){
            return new ResponseData(chatList,true,"获取成功",200);
        }else{
            return new ResponseData(null,false,"获取失败",201);
        }
    }


//    消息列表功能（估计是整个项目里最不好写的查询了的查询了）
//    功能：获取最近的发消息给我所有用户，但是正如B站有两个区(鬼畜区，和鬼畜素材区)，分为未读消息区和已读信息区
//    按照由新到旧排列，写道现在，人快累死了┭┮﹏┭┮ /(ㄒoㄒ)/~~ ≧ ﹏ ≦😫     看自己的代码跟💩
//    数据查询需求  在chat表中最与我相关的所有对话中，提取我与每个的最新对话（唯一），且按照时间排序
    @GetMapping("/infoList")
    public ResponseData getinfoList(@RequestHeader("token") String token,@RequestParam(defaultValue = "1") Integer page ,
                                    @RequestParam(defaultValue = "10") Integer pageSize){

        Claims claims=(Claims)ujwt.tokenToOut(token);//强制转换属性
        String id=claims.getId();

        ShowPage showPage = new ShowPage();
        Integer pageBegin = (page-1) * pageSize;

        //当前页码
        showPage.setPageNum(page);
        //前（后）一页页码
        showPage.setPrePage(page - 1);
        showPage.setNextPage(page + 1 );
        //总数据条数
        QueryWrapper<Blog> qw=new QueryWrapper<>();
        qw.eq("type",3);
        showPage.setSize(chatMapper.selinfoList(id).size());
        //开始（末尾）数据是第几行
        showPage.setStartRow(pageBegin + 1);
        showPage.setEndRow(pageBegin + pageSize + 1);
        //每页数据条数
        showPage.setPageSize(pageSize);
        //总页数
        Integer div = showPage.getSize()/pageSize;
        Integer pages = showPage.getSize() % pageSize == 0 ? div : div + 1;
        showPage.setPages(pages);
        //是否是第（最后）一页,是否有前（后）一页
        showPage.setIsFirstPage(page == 1);
        showPage.setHasPreviousPage(page != 1);
        showPage.setIsLastPage(page.equals(pages));
        showPage.setHasNextPage(!page.equals(pages));




        List<InfoVo> v=chatMapper.selinfoListPage(id,pageBegin,pageSize);
        System.out.println("11111111111111111111111111111111111111111");
        System.out.println(v);
        showPage.setData(v);
        return new ResponseData(showPage,true,"成功获取数据",200);
    }

}
